package imlayer

import (
    "errors"
    "strings"
	"strconv"
	"dhfshop/models/im"
	"dhfshop/models/isv"
	template "wxsdk/miniapp/message/template/miniapp"
	"github.com/astaxie/beego"
)

// 初始化模板信息
func InitDefaultTemplateCfg(partnerId int64,appId string) {
	if ok := im.CheckTemplateExistByAppId(partnerId, appId); !ok {
	    authorizerAccessToken := ""
		if custAccount, err := isv.GetCustAccountByAppId(appId); err != nil {
			return
		}else{
		    authorizerAccessToken = custAccount.AccessToken
		}
		pubTmpList := im.GetAllPubTemplate()
		//查询账号下是否已经存在此模板，更新到本地
		if templateGetResult, err := template.TemplateList(authorizerAccessToken, 0, 20); err == nil && len(templateGetResult.Lists) > 0 {
			for _, list := range templateGetResult.Lists {
				if tmp, ok := pubTmpList[list.Title]; ok {
					m := &im.TemplateCfg{PartnerId:partnerId,AppId:appId,PubTitleId:tmp.PubTitleId,PubTitle:tmp.PubTitle,TemplateId:list.TemplateId,
									 KeywordIdList:intArrToString(tmp.KeywordIdList)}
					if _, err := im.AddTemplateCfg(m); err != nil {
						beego.Debug(err.Error())
					}else{
						delete(pubTmpList, list.Title)
					}
				}
			}
		}
		for _, temp := range pubTmpList {
			if id, err := template.TemplateAdd(authorizerAccessToken,temp.PubTitleId,temp.KeywordIdList); err == nil {
				m := &im.TemplateCfg{PartnerId:partnerId,AppId:appId,PubTitleId:temp.PubTitleId,PubTitle:temp.PubTitle,TemplateId:id,
									 KeywordIdList:intArrToString(temp.KeywordIdList)}
				if _, err := im.AddTemplateCfg(m); err != nil {
					beego.Debug(err.Error())
				}
			}else{
				beego.Debug("app_id",appId,"TemplateAdd TitleId:", temp.PubTitleId, err.Error())
			}
		}
	}
}

func intArrToString(input []int) string {
    var idArr []string
	for _, value :=range input {
		idArr = append(idArr, strconv.Itoa(value))
	}
    output := strings.Join(idArr, ",")
	return output
}

func GetTemplateId(partnerId int64,appId,titleId string) (templateId string, err error) {
	templateCfg, err := im.GetTemplateCfgByAppIdAndType(partnerId,appId,titleId)
	if err != nil {
		return "", errors.New("no valid template_id")
	}
	templateId = templateCfg.TemplateId
	return templateId, nil
}

